springcloud实战 您所在的位置:网站首页 springcloud整合gateway引入nacos报Parameter 0 of method springcloud实战

springcloud实战

2024-07-15 23:09| 来源: 网络整理| 查看: 265

博主随记,供大家参考

目录

前言

一、下载seata-server?

二、下载nacos

三、创建mysql数据库表

四、修改seata-server-1.4.2配置文件

1.配置注册中心

2.配置-配置中心

五、添加seata-server的配置文件

1.天大的坑

六、微服务项目整合seata

1.在每个服务引入pom依赖(博主自行配置,供大家参考)

2.在yml文件中配置项目的配置文件

七、启动测试

总结

前言

  博主本人在参考了黑马的视频后,进行了springcloud整合seata1.4.2的实践,结果是频频报错,在参考与使用了官网的部署后还是出现了很多奇怪的报错,经过两天的部署终于部署完成,整理出了一份正确的部署方案和全方案的报错解决供大家参考。

一、下载seata-server?

下载并解压seata1.4.2,seata下载地址:https://github.com/seata/seata/releases/download/v1.4.2/seata-server-1.4.2.zip

二、下载nacos

nacos下载地址:Releases · alibaba/nacos · GitHub

windows环境下,在nacos/bin目录下,进入dos输入命令startup.cmd -m standalone启动nacos

三、创建mysql数据库表

新建数据库seata,然后选择seata数据库创建表

代码如下:

CREATE TABLE IF NOT EXISTS `global_table` (     `xid`                       VARCHAR(128) NOT NULL,     `transaction_id`            BIGINT,     `status`                    TINYINT      NOT NULL,     `application_id`            VARCHAR(32),     `transaction_service_group` VARCHAR(32),     `transaction_name`          VARCHAR(128),     `timeout`                   INT,     `begin_time`                BIGINT,     `application_data`          VARCHAR(2000),     `gmt_create`                DATETIME,     `gmt_modified`              DATETIME,     PRIMARY KEY (`xid`),     KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),     KEY `idx_transaction_id` (`transaction_id`) ) ENGINE = InnoDB   DEFAULT CHARSET = utf8;

-- the table to store BranchSession data CREATE TABLE IF NOT EXISTS `branch_table` (     `branch_id`         BIGINT       NOT NULL,     `xid`               VARCHAR(128) NOT NULL,     `transaction_id`    BIGINT,     `resource_group_id` VARCHAR(32),     `resource_id`       VARCHAR(256),     `branch_type`       VARCHAR(8),     `status`            TINYINT,     `client_id`         VARCHAR(64),     `application_data`  VARCHAR(2000),     `gmt_create`        DATETIME(6),     `gmt_modified`      DATETIME(6),     PRIMARY KEY (`branch_id`),     KEY `idx_xid` (`xid`) ) ENGINE = InnoDB   DEFAULT CHARSET = utf8;

-- the table to store lock data CREATE TABLE IF NOT EXISTS `lock_table` (     `row_key`        VARCHAR(128) NOT NULL,     `xid`            VARCHAR(128),     `transaction_id` BIGINT,     `branch_id`      BIGINT       NOT NULL,     `resource_id`    VARCHAR(256),     `table_name`     VARCHAR(32),     `pk`             VARCHAR(36),     `gmt_create`     DATETIME,     `gmt_modified`   DATETIME,     PRIMARY KEY (`row_key`),     KEY `idx_branch_id` (`branch_id`) ) ENGINE = InnoDB   DEFAULT CHARSET = utf8;

CREATE TABLE IF NOT EXISTS `distributed_lock` (     `lock_key`       CHAR(20) NOT NULL,     `lock_value`     VARCHAR(20) NOT NULL,     `expire`         BIGINT,     primary key (`lock_key`) ) ENGINE = InnoDB   DEFAULT CHARSET = utf8mb4;

INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0); INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0); INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0); INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);  

四、修改seata-server-1.4.2配置文件 1.配置注册中心

在seata-server-1.4.2/conf文件下修改registry.conf文件,加入注册中心配置:

registry {   type = "nacos"

  nacos {     application = "seata-server"         #注册在nacos的服务名     serverAddr = "127.0.0.1:8848"    #nacos服务的地址端口     group = "SEATA_GROUP"          #注册在nacos的分组     namespace = ""                           #指定在nacos的命名空间     cluster = "default"                        #集群 使用default     username = "nacos"                    #nacos用户名     password = "nacos"                     #nacos密码   } }

2.配置-配置中心

在seata-server-1.4.2/conf文件下修改registry.conf文件,加入配置中心配置:

config {   type = "nacos"

   nacos {     serverAddr = "127.0.0.1:8848"            #配置中心(nacos的地址)     namespace = ""                                   #配置中心的命名空间     group = "SEATA_GROUP"                  #配置中心的分组     username = "nacos"                            #nacos用户名     password = "nacos"                             #nacos密码     dataId = "seataServer.properties"        #nacos的seata配置文件的dataId   }    

}

  大家可能像我一样迷惑,配置配置中心和注册中心的代码很相似,啥是注册中心?啥是配置中心呢?有啥不一样的?

   注册中心就是将seata服务注册在nacos的服务列表,使用nacos管理更加的方便,而配置中心是我们将seata的配置配置在nacos的配置中心中,这样seata就可以直接在nacos中拉取配置,避免了seata集群需要配置整个集群每个服务的配置文件的问题,加快了部署效率。

五、添加seata-server的配置文件

新建配置dataId为seataServer.properties、分组为SEATA_GROUP、配置格式为properties

properties配置文件内容如下:

# 数据存储方式,db代表数据库

store.mode=db

store.db.datasource=druid

store.db.dbType=mysql

store.db.driverClassName=com.mysql.cj.jdbc.Driver

store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=TRUE&serverTimezone=GMT%2B8

store.db.user=root

store.db.password=123456

store.db.minConn=5

store.db.maxConn=30

store.db.globalTable=global_table

store.db.branchTable=branch_table

store.db.queryLimit=100

store.db.lockTable=lock_table

store.db.maxWait=5000

# 事务、日志等配置

server.recovery.committingRetryPeriod=1000

server.recovery.asynCommittingRetryPeriod=1000

server.recovery.rollbackingRetryPeriod=1000

server.recovery.timeoutRetryPeriod=1000

server.maxCommitRetryTimeout=-1

server.maxRollbackRetryTimeout=-1

server.rollbackRetryTimeoutUnlockEnable=false

server.undo.logSaveDays=7

server.undo.logDeletePeriod=86400000

# 客户端与服务端传输方式

transport.serialization=seata

transport.compressor=none

# 关闭metrics功能,提高性能

metrics.enabled=false

metrics.registryType=compact

metrics.exporterList=prometheus

metrics.exporterPrometheusPort=9898

1.天大的坑

注意这里还有一个天大的坑!!!需要在nacos配置中心添加一个配置service.vgroupMapping.my_text_tx_group,分组为SEATA_GROUP内容为text格式的default

这可能是一个bug,浪费我两天的时间才解决,如果不配置这个在启动微服务的项目的时候会报错找不到服务:no available service found in cluster ‘XXXXX‘

注意这个报错: Error creating bean with name 'globalTransactionScanner' defined in class path resource......

这个报错应该是垃圾的回收机制导致的问题,在项目的配置中加入:

--add-opens java.base/java.lang=ALL-UNNAMED  可以解决问题

六、微服务项目整合seata 1.在每个服务引入pom依赖(博主自行配置,供大家参考) com.alibaba.cloud spring-cloud-starter-alibaba-seata io.seata seata-spring-boot-starter io.seata seata-spring-boot-starter ${seata.version} com.alibaba.nacos nacos-client 1.4.2 2.在yml文件中配置项目的配置文件 seata: tx-service-group: my_test_tx_group #对应seataServer.properties中的service.vgroupMapping.my_test_tx_group 集群分组 registry: type: nacos #注册中心类型:nacos nacos: application: seata-server # seata-server注册在nacos中的服务名 server-addr: 127.0.0.1:8848 # nacos的地址端口 group : SEATA_GROUP # seata-server在nacos的分组 namespace: "" # seata-server在nacos的命名空间ID username: nacos # nacos账号 password: nacos # nacos密码 config: type: nacos nacos: server-addr: 127.0.0.1:8848 group: SEATA_GROUP namespace: "" # seata-server的配置文件的命名空间ID dataId: seataServer.properties # seata-server在nacos的配置dataId username: nacos password: nacos 七、启动测试

启动nacos:startup.cmd -m standalone,后启动seata,观察nacos的服务列表和注册列表:

seata启动成功为:

观察nacos的配置中心和注册中心:

之后启动微服务的项目观察seata的日志:

如图则为seata整合成功。

总结

seata的整合确实比较费劲,因为这几天练习科目二导致两天才配置完成,因为各种的报错等等问题,总之希望对大家能有一定的帮助。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有